#ifndef USER_H
#define USER_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

// 用户类型定义
#define USER_TYPE_NORMAL 0  // 普通用户
#define USER_TYPE_ADMIN  1  // 管理员

// 用户信息结构体
typedef struct {
    int id;                 // 用户编号
    char name[32];          // 姓名
    char password[32];      // 密码
    char address[64];       // 送餐地址
    char phone[16];         // 联系电话
    int type;               // 用户类型（0: 普通用户, 1: 管理员）
} User;

// 用户链表节点结构体
typedef struct UserNode {
    User data;
    struct UserNode* next;
} UserNode;

// 链表操作函数声明

// 加载所有用户信息到链表，返回用户数量
int load_users(const char* filename, UserNode** head);

// 保存所有用户信息到文件，返回保存的用户数量
int save_users(const char* filename, UserNode* head);

// 添加新用户到链表尾部，若编号已存在则不添加，返回1成功，0已存在
int add_user(UserNode** head, const User* new_user);

// 根据用户编号删除用户，成功返回1，失败返回0
int delete_user(UserNode** head, int user_id);

// 查找用户，返回指向该节点的指针，未找到返回NULL
UserNode* find_user_by_id(UserNode* head, int user_id);

// 修改用户信息，成功返回1，失败返回0
int update_user(UserNode* head, const User* updated_user);

// 打印所有用户信息（调试用）
void print_all_users(UserNode* head);

// 释放链表内存
void free_all_users(UserNode* head);

// 登录校验：成功返回1并输出用户信息，失败返回0
int check_user_login(UserNode* head, const char* name, const char* password, User* out_user);

#ifdef __cplusplus
}
#endif

#endif // USER_H